#include<stdio.h>
#include<stdlib.h>
#include "boolean.h"
#include "ADT_DatabaseSosNet.h"

#ifndef MODUL_SOCIAL_NETWORK
#define MODUL_SOCIAL_NETWORK

char currentFILE[100];
int admin = 1;
address1 currentUser;
FILE* INPUT,OUTPUT;

void InputAdmin(ListMember * G);
// Digunakan untuk memproses input yang diberikan sebagai admin
void InputUser();
// Digunakan untuk memproses input yang diberikan sebagai user

void AdminLoad(ListMember * G, char X[100]);
// {I.S : Sembarang, namafile sudah terdefinisi}
// {F.S : namafile terset seperti input user, G telah menjadi seperti input file}
// Memakai ADT-MesinKata dan ADT-MesinKarakter
void AdminChange(ListMember G, address1 now);
// {I.S : State Admin}
// {F.S : State User, dengan nama user harus ada di dalam graf, set currentUser}
void AdminSave(ListMember G);
// {I.S : Graf telah terdefinisi}
// {F.S : Menyimpan semua data ke file namafile}
void AdminReload(ListMember * G);
// {I.S : Sembarang}
// {F.S : Graf telah menjadi seperti input file}
void AdminAddUser(ListMember * G, infotype X);
// {I.S : Graf Terdefinisi}
// {F.S : MEnambah user baru secara terurut}
// {Jika alokasi memori untuk X gagal, memberikan pesan eror}
// {Proses : Menggunakan prosdur InsertVTerurut}
void AdminModUser(ListMember * G, char X[100]);
// {I.S : Graf Terdefinisi, X adalah email dari user yang akan dimodify}
// {F.S : Mengubah data user yang telah ada}
// {Proses : Menggunakan fungsi SearchByInfo}
void AdminList(ListMember G, int a, int b);
// {I.S : Graf Terdefinisi}
// {F.S : Mencetak ke layar Graf secara terurut}
// {Proses : Menggunakan fungsi PrintInfo}
// {a dari 1..6 menunjukkan adanya terurut berdasarkan atribut tertentu, jika 0 maka ditulis tanpa sesuai input}
// {b=1 menunjukkan ascending, sedangkan 0 adalah descending}
void AdminExit(ListMember G);
// {I.S : Graf Terdefinisi}
// {F.S : Keluar dari simulasi jejaring sosial}
// {Proses : Menanyakan apakah Graf akan disave?}

void UserListFriend();
// {I.S : Graf Terdefinisi}
// {F.S : Mencetak ke layar, list semua friend dari currentUser}
void UserFriend(char X[100]);
// {I.S : Graf Terdefinisi}
// {F.S : Menambahkan friend dari currentUser}
void UserUnfriend(char X[100]);
// {I.S : Graf Terdefinisi}
// {F.S : Mendelete friend dari currentUser, jika X bukan merupakan teman dari currentUser, maka ada warning}
void UserUpdate();
// {I.S : Graf Terdefinisi}
// {F.S : Update data dari currentUser}
void UserBirthday(Tanggal Today, int HariLagi);
// {I.S : Graf Terdefinisi}
// {F.S : Tercetak ke layar list teman dengan birthday dalam jangka x hari, dengan x input user. Secara default 7}
void UserSame(int a);
// {I.S : Graf Terdefinisi}
// {F.S : Tercetak ke layar list teman level 1, 2, 3 dengan kesamaan atribut dari currentUser}
void UserNotFriend();
// {I.S : Graf Terdefinisi}
// {F.S : Tercetak ke layar list teman level 2, 3 yang bukan list level 1}
void UserClose();
// {I.S : State User}
// {F.S : State Admin}

int GetKodeA(char X[100]);
int GetKodeB(char X[100]);

#endif
